<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 对象的特性:
    // (1) 对象对应键名取值和赋值   ->  跟排列顺序无关
    // 语法: 
    //   点语法      => 对象.属性名     -> 已知对象的键名,直接对应属性取值(快捷取值)
    //   中括号语法  => 对象["属性名"]  -> 已知对象的键名对应的字符串 -> 从对象中取值 (对象遍历 和 对象取值封装)

    // 对象取值时, 取一个不存在的属性 => undefined
    // 对象赋值时, 赋一个不存在的属性 => 新增该属性到对象中

    // 对象的遍历
    // for ... in  (不能使用for...of => ES6新增 常用语遍历数组和伪数组)

    var zhang = {
        name: "张三",
        class: 2215,
        chinese: 55,
        math: 66,
        english: 77,
        say: function () {
            console.log("hello");
        }
    }
    // console.log(zhang);


    // 点语法  => 对应键名修改

    // 取值
    // console.log(zhang.name);
    // console.log(zhang.class);
    // console.log(zhang.chinese);
    // console.log(zhang.math);
    // console.log(zhang.english);
    // console.log(zhang.say);
    // zhang.say(); //去除zhang.say=>对应的函数=> 再调用

    // 赋值
    // zhang.name = "李四";
    // zhang.class = "2216";
    // zhang.chinese = 60;
    // zhang.math = 90;
    // zhang.english = 0;
    // console.log(zhang);

    // 中括号语法
    // 取值
    // console.log(zhang["name"]);
    // console.log(zhang["class"]);
    // console.log(zhang["chinese"]);
    // console.log(zhang["math"]);
    // console.log(zhang["english"]);
    // console.log(zhang["say"]);
    // zhang["say"]();

    // 赋值
    // zhang["name"] = "王五";
    // zhang["class"] = "2217";
    // zhang["chinese"] = 99;
    // zhang["math"] = 89;
    // zhang["english"] = 59;
    // console.log(zhang);

    // 对象取值时, 取一个不存在的属性 => undefined
    // console.log(zhang.sex);

    // 对象赋值时, 赋一个不存在的属性 => 新增该属性到对象中
    // zhang.sex = "男";
    // console.log(zhang);


    // 对象遍历  for...in

    var zhang = {
        name: "张三",
        class: 2215,
        chinese: 55,
        math: 66,
        english: 77,
        say: function () {
            console.log("hello");
        }
    }
    // console.log(zhang); 

    // for...in 遍历数组,返回数组的下标 (数组也是一个特殊的对象)
    // for...in 遍历对象,返回对象的键名
    for (var key in zhang) {
        console.log(key, typeof key); // "name" "class" "chinese"
        // console.log(zhang.key); // 查找对象zhang的key属性
        console.log(zhang[key]); // zhang["name"]  zhang["age"]
    }


    // 对象方法封装
    // function get(key) {
    //     var zhang = {
    //         name: "张三",
    //         class: 2215,
    //         chinese: 55,
    //         math: 66,
    //         english: 77,
    //         say: function () {
    //             console.log("hello");
    //         }
    //     }
    //     return zhang[key];
    // }

    // console.log(get("name"));








</script>

</html>